Oracle 分析函数over,列转行函数pivot理解及综合运用(报表中的小计和合计)

您所在的位置:网站首页 oracle的列转行 列不定 Oracle 分析函数over,列转行函数pivot理解及综合运用(报表中的小计和合计)

Oracle 分析函数over,列转行函数pivot理解及综合运用(报表中的小计和合计)

2023-09-20 20:43| 来源: 网络整理| 查看: 265

1、Over函数(分析统计函数)

1.1语法

sum/avg/count() over(partition by ..) over()在什么条件之上;partition by 按哪个字段划分组;

1.2示例

SELECT E.ENAME, E.JOB, E.SAL, E.DEPTNO, SUM(E.SAL) OVER(PARTITION BY E.DEPTNO) SUM_SAL, --统计某组中的总计值 AVG(E.SAL) OVER(PARTITION BY E.DEPTNO) AVG_SAL, --统计某组中的平均值 COUNT(E.SAL) OVER(PARTITION BY E.DEPTNO) COUNT_SAL --按某列分组,并统计该组中记录数量 FROM EMP E;

在这里插入图片描述

2、Pivot函数(行转列函数)

2.1语法 Pivot函数是将多行聚合并转置为列,每列代表不同范围的聚合数据。新语法的概述如下:

SELECT ... FROM ... PIVOT [XML] ( pivot_clause pivot_for_clause pivot_in_clause ) WHERE ... pivot_clause:定义要聚合的列(pivot 是聚合操作);pivot_for_clause:定义要分组和旋转的列;pivot_in_clause:为 pivot_for_clause中的列定义过滤器(即限制结果的值范围)。pivot_in_clause 中每个值的聚合将被转置到单独的列中(在适当的情况下)

2.2例子 以Emp表为例,按部门和工作对薪水求和,但将每个部门的总和转移到自己的列中。在我们调整工资之前,我们将检查基础数据,如下所示:

SQL> SELECT job 2 , deptno 3 , SUM(sal) AS sum_sal 4 FROM emp 5 GROUP BY 6 job 7 , deptno 8 ORDER BY 9 job 10 , deptno; JOB DEPTNO SUM_SAL --------- ---------- ---------- ANALYST 20 6600 CLERK 10 1430 CLERK 20 2090 CLERK 30 1045 MANAGER 10 2695 MANAGER 20 3272.5 MANAGER 30 3135 PRESIDENT 10 5500 SALESMAN 30 6160 9 rows selected.

对于每个职位,我们把部门进行行转列,让所有部门变成了列,显示工资总额,这样的数据相比较上面的数据更加简洁直观,如下所示:

SQL> WITH pivot_data AS ( 2 SELECT deptno, job, sal 3 FROM emp 4 ) 5 SELECT * 6 FROM pivot_data 7 PIVOT ( 8 SUM(sal) --


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3